package hotel;

import java.sql.*;

import java.io.*;
import java.util.*;

import javax.swing.JOptionPane;

public class Database {
	private Connection conn;
	public Statement stat;

	public Database() throws SQLException, IOException {
		conn = getConnection();
		stat = conn.createStatement();
	}

	public Vector querySelect(String query) {
		Vector v = null;
		String[] record;
		int colonne = 0;
		try {
			ResultSet rs = stat.executeQuery(query); // Ottengo il ResultSet
														// dell'esecuzione della
														// query
			v = new Vector();
			ResultSetMetaData rsmd = rs.getMetaData();
			colonne = rsmd.getColumnCount();
			System.out.println(colonne);
			while (rs.next()) { // Creo il vettore risultato scorrendo tutto il
								// ResultSet
				record = new String[colonne];
				for (int i = 0; i < colonne; i++)
					record[i] = rs.getString(i + 1);
				v.add((String[]) record.clone());
			}
			rs.close();
		} catch (Exception e) {
			e.printStackTrace();
		}
		return v;
	}

	public void iniz() throws SQLException, IOException {
		try {
			String clienti = "CREATE TABLE CLIENTI ("
					+ "codice INT AUTO_INCREMENT," + "nome VARCHAR(20),"
					+ "cognome VARCHAR(20)," + "datadinascita VARCHAR(10),"
					+ "comunedinascita VARCHAR(20),"
					+ "provinciadinascita VARCHAR(2),"
					+ "residenza VARCHAR(20),"
					+ "provinciadiresidenza VARCHAR(2),"
					+ "tipodidocumento VARCHAR(20),"
					+ "numerodidocumento VARCHAR(15),"
					+ "rilasciatoda VARCHAR(30),"
					+ "datadirilascio VARCHAR(10),"
					+ "datadiarrivo VARCHAR(10)," + "indirizzo VARCHAR(100),"
					+ "PRIMARY KEY(codice)," + "UNIQUE(numerodidocumento))";
			String camere = "CREATE TABLE CAMERE ("
					+ "codice INT AUTO_INCREMENT," + "numero VARCHAR(10),"
					+ "numeroposti INT," + "numpostioccupati INT,"
					+ "matrimoniale BOOLEAN," + "stato VARCHAR(20),"
					+ "PRIMARY KEY(codice)," + "UNIQUE(numero))";
			String associazione = "CREATE TABLE ASSOCIAZIONE("
					+ "numerodocumento VARCHAR(15)," + "camera VARCHAR(10),"
					+ "PRIMARY KEY (numerodocumento,camera)," +
						"UNIQUE(numerodocumento)," +
						"FOREIGN KEY(numerodocumento) REFERENCES CLIENTI(numerodidocumento)," +
						"FOREIGN KEY(camera) REFERENCES CAMERE(numero))";
			stat.execute(clienti);
			stat.execute(camere);
			stat.execute(associazione);
		} catch (SQLException e) {
			System.out.println(e.getMessage());
		}
	}

	public boolean query(String query) throws SQLException, IOException {
		boolean fatto = false;
		try {
			stat.execute(query);
			fatto = true;
		} catch (SQLException e) {
			System.out.println(e.getMessage());
		}
		return fatto;
	}

	public void chiudiConnessione() throws SQLException {
		conn.close();
	}

	public boolean rimuoviCliente(String numeroDocumento) {
		boolean fatto = false;
		try {
			stat.execute("DELETE FROM CLIENTI WHERE numerodidocumento='"
					+ numeroDocumento + "'");
			fatto = true;
		} catch (SQLException e) {
			e.printStackTrace();
		}
		return fatto;
	}
	
	public boolean rimuoviCamera(String numeroCamera){
		boolean fatto = false;
		try {
			stat.execute("DELETE FROM CAMERE WHERE numero='"
					+ numeroCamera + "'");
			fatto = true;
		} catch (SQLException e) {
			e.printStackTrace();
		}
		return fatto;
	}

	public ResultSet cercaPerCognome(String cognome) throws SQLException {
		return stat.executeQuery("SELECT * INTO CLIENTI WHERE cognome='"
				+ cognome + "'");
	}

	public ResultSet cercaPerNome(String nome) throws SQLException {
		return stat.executeQuery("SELECT * INTO CLIENTI WHERE nome='" + nome
				+ "'");
	}

	public ResultSet cercaPerDataDiNascita(String data) throws SQLException {
		return stat.executeQuery("SELECT * INTO CLIENTI WHERE datadinascita='"
				+ data + "'");
	}

	public ResultSet cercaPerNumeroDocumento(String documento)
			throws SQLException {
		return stat
				.executeQuery("SELECT * INTO CLIENTI WHERE numerodidocumento='"
						+ documento + "'");
	}

	public ResultSet cercaPerDataDiArrivo(String data) throws SQLException {
		return stat.executeQuery("SELECT * INTO CLIENTI WHERE datadiarrivo='"
				+ data + "'");
	}

	public void stampaQuery(String query) throws SQLException, IOException {
		try {
			ResultSet result = stat.executeQuery(query);
			while (result.next()) {
				System.out.println(result.getString(1) + " "
						+ result.getString(2));// mostra solo nome e cognome
			}
		} catch (SQLException e) {
			System.out.println("Sintassi errata");
		}
	}

	public Connection getConnection() throws SQLException, IOException {
		Properties props = new Properties();
		FileInputStream in = new FileInputStream("Risorse/database.properties");
		props.load(in);
		in.close();
		String drivers = props.getProperty("jdbc.drivers");
		String url = props.getProperty("jdbc.url");
		String username = props.getProperty("jdbc.username");
		String password = props.getProperty("jdbc.password");
		if (drivers != null)
			System.setProperty("jdbc.drivers", drivers);
		return DriverManager.getConnection(url, username, password);
	}
}
